
// Promise() 同步 executor 同步
// const p = new Promise((resolve, reject) => {

//   console.log('promise123')
// })

// // 异步
// p.then(res => {

// })

// 为什么 promise是同步 then是异步





// 1.
// $.ajax({ // 异步程序
//   url: 'http://localhost:3000/data.json',
//   success(data) {
//     console.log(getNames(data))
//   }
// });

// 2.
// var data = $.ajax({
//   url: 'http://localhost:3000/data.json',
//   async: false // 同步
// });
// console.log(data.responseJSON); // responseJSON
// // console.log(getNames(data));

// 3.
// const p = new Promise((resolve, reject) => {
//   $.ajax({
//     url: 'http://localhost:3000/data.json',
//     success(data) {
//       resolve(data);
//     }
//   })
// });
// p.then(res => {
//   console.log(getNames(res))
// })

// console.log('I am the first');

function getNames(data) {
  return data.map(v => {
    return v.name
  })
}


// Promise 存在意义：异步问题同步化解决方案 （最优解）
// ajax() --> getNames() --> console.log()


// 解决回调地狱 最优解 是配合 async await

function getData() {
  return new Promise((resolve, reject) => {
    $.ajax({
      url: 'http://localhost:3000/data.json',
      success(data) {
        resolve(data);
      }
    })
  });
}

doSth();

async function doSth() {
  console.log('I am the first');
  const data = await getData();
  const data1 = await getData();
  const data2 = await getData();
  console.log(getNames(data));
  console.log(getNames(data1));
  console.log(getNames(data2));
}

console.log('I am the first');

